
-- Lua 模块与包
--[[
    lua模块： 由变量、函数等已知元素组成的 table；
        因此创建一个模块很简单，就是创建一个 table，然后把需要导出的常量、函数放入其中，最后返回这个 table 就行。

    使用 require 函数 加载外部模块 ： require("<模块名>")
--]]

-- 引入d05-module-external.lua  模块

-- 方式一
--require("d05-module-external")
--
--print(module.constant)
--module.func3()

-- 方式二 ，推荐

-- 使用一个变量接收
local m = require("d05-module-external")

print(m.constant)

m.func3()

-- require 函数 的加载机制
--[[
    1>，从 Lua 文件或 C 程序库中加载；
    2>，从环境变量 LUA_PATH 配置的路径中加载；
--]]

-- LUA_PATH
--[[
    如果不指定LUA_PATH ，会在 lua 文件编译时 会初始化一个默认值
    2>，从环境变量 LUA_PATH 配置的路径中加载；
    配置 LUA_PATH ：
        export LUA_PATH="~/lua/?.lua;;"

    文件路径以 ";" 号分隔，最后的 2 个 ";;" 表示新加的路径后面加上原来的默认路径。
--]]

-- lua引入C/C++ 的程序包
--[[
    loadlib函数 ：用于引入C/C++ 的程序包；有两个参数: 库的绝对路径  、 初始化函数
    例如 ： local f = loadlib('/usr/local/lua/lib/libluasocket.so', "luaopen_socket")

    loadlib 函数加载指定的库并且连接到 Lua，然而它并不打开库（也就是说没有调用初始化函数），
    反之他返回初始化函数作为 Lua 的一个函数，这样我们就可以直接在Lua中调用他。

    如果加载动态库或者查找初始化函数时出错，loadlib 将返回 nil 和错误信息。
--]]
